perm filename SCANW.F4[MUS,LCS]3 blob
sn#093957 filedate 1974-03-24 generic text, type T, neo UTF8
00100 C ***** SCANNER *************************
00200 SUBROUTINE SCANR
00300 DIMENSION IP(30)
00400 COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
00500 1 ,IQ(27),ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
00600 1 ,INP(72),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
00700 EQUIVALENCE(IF,ISCA(6)),(ISS,ISCA(9)),(IE,ISCA(5)),(IDOT,IDAT(11))
00800 1 ,(IEN,ISCA(4)),(IP,PL)
00900 C 2/74 IP IS NOW EQUIV TO PL! USED TO BE IP WITH P.(HURT 'TAP' ROUTINE.)
01000 C WILL THIS DO ANYTHING TO MUSIC5 VERSION??
01100 NNUM=-1
01200 ISKP=0
01300 JJ=0
01400 XMINUS=1.
01500 999 IDECI=-1
01600 M=0
01700 2799 N=INP(ML)
01800 IF(N.NE.IQT)GO TO 899
01900 JA=-1
02000 ML=ML+1
02100 ISUB=8
02200 JJ=JJ+1
02300 VX(JJ)=ML
02400 C POINTS TO FIRST LIT. CHAR.
02500 DO 1177 K=ML,72
02600 IF(INP(K).NE.IQT)GO TO 1177
02700 ML=K+1
02800 2177 N=INP(ML)
02900 GO TO 899
03000 1177 CONTINUE
03100 CC GO TO 99
03200 C SKIPS 'LIT' ITEMS IN RAN. SELECTION
03300 899 ML=ML+1
03400 IF(N.EQ.ISEMI)GO TO 751
03500 IF(N.NE.IBLA.AND.N.NE.',')GO TO 510
03600 4702 IF(ISKP)202,2799,2799
03700
03800 510 IF(JA)GO TO 70
03900 C********** MAY 22,71
04000 DO 77 K=1,12
04100 IF(N.NE.ISCA(K))GO TO 77
04200 IF(K.NE.2.AND.K.NE.4)GO TO 511
04300 NSWCH=K-4
04400 GO TO 2177
04500 C TO SWITCH ALWAYS USE OCT.# /PBF4/ /NE5/ P=PROXIMITY, N=NORMAL
04600 C ************ MAY 22,71
04700 511 NNUM=K
04800 JJ=JJ+1
04900 NFLG=-1
05000 N=INP(ML)
05100 IF(N.NE.IF)GO TO 410
05200 NNUM=NNUM-1
05300 GO TO 610
05400 410 IF(N.NE.ISS)GO TO 3410
05500 NNUM=NNUM+1
05600 610 ML=ML+1
05700 CC3410 N=INP(ML)
05800 CC IF(N.NE.IEN)GO TO 371
05900 N=INP(ML)
06000 3410 IF(N.NE.IEN.AND.N.NE.'I')GO TO 371
06100 C 'END' OR 'FINE' WILL END INST.
06200 C******** MAY 20,71
06300 3411 VX(JJ)=10000.
06400 IF(DUR(LK))DUR(LK)=1000.
06500 IAMP=-1
06600 RETURN
06700 371 IF(N.EQ.ISEMI.OR.N.EQ.IBLA)GO TO 5410
06800 DO 177 KN=2,8
06900 CC********* MAY 20,71 371 DO 177 KN=2,8
07000 IF(N.NE.IDAT(KN))GO TO 177
07100 JSCA=KN-2
07200 ML=ML+1
07300 GO TO 2410
07400 177 CONTINUE
07500 GO TO 6410
07600 5410 KN=-1
07700 6410 IF(NSWCH.EQ.0)GO TO 2410
07800 IF(KN)GO TO 7410
07900 IF(N.EQ.'+')NOLD=NOLD+6
08000 IF(N.EQ.'-')NOLD=NOLD-6
08100 C /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
08200 7410 IF(NOLD-NNUM.GT.5.AND.JSCA.LT.7)JSCA=JSCA+1
08300 IF(NOLD-NNUM.LT.-5.AND.JSCA.GT.0)JSCA=JSCA-1
08400 C WILL JUMP TO NEAREST NOTE *********** MAY 22,71
08500 2410 VX(JJ)=JSCA*12+NNUM
08600 NOLD=NNUM
08700 C ********** MAY 22,71
08800 4410 NNUM=-2
08900 CC IF(M.EQ.IEN)NSWCH=0
09000 CC IF(M.EQ.IPP)NSWCH=-1
09100 IF(INP(ML).EQ.ISEMI)RETURN
09200 C ABOVE FINDS SCALE NOTES; IF NSWCH=0 OCT. NUM WILL STICK UNTIL RESET
09250 IF(N.EQ.IXX)GO TO 210
09300 GO TO 310
09400 C *********MAY 22,71
09500 77 CONTINUE
09600 70 IF(N.NE.'-')GO TO 71
09700 XMINUS=-1.
09800 GO TO 2799
09900 210 JJ=JJ+1
10000 IF(JJ.EQ.1)GO TO 3310
10100 C****** MAY 19,71
10200 XMINUS=1.
10300 VX(JJ)=0
10400 CC IF(JJ.EQ.1)VX(JJ)=-99.
10500 C 'X N1,N2' MAY REPLACE 'REP N1,N2'. N2=0 BECOMES N2=2
10600 GO TO 310
10700 71 IF(N.EQ.IXX)GO TO 210
10800 IF(N.EQ.'R')GO TO 73
10900
11000 1410 DO 78 K=1,11
11100 IF(N.NE.IDAT(K))GO TO 78
11200 ISKP=-1
11300 IF(N.NE.IDOT)GO TO 79
11400 IDECI=M
11500 GO TO 75
11600 79 M=M+1
11700 IP(M)=K-1
11800 GO TO 75
11900 78 CONTINUE
12000 IF(N.NE.IE.AND.N.NE.IF)GO TO 781
12100 C 'END' OR 'FINE' WILL END INST.
12200 JJ=1
12300 GO TO 3411
12400 781 IF(N.EQ.'/')N=ISEMI
12500 C FOR MOTIVIC TRANFORMATIONS
12600
12700 CC75 IF(ML.GT.72)GO TO 99
12710 75 IF(INP(ML).NE.IXX)GO TO 752
12720 ML=ML-1
12730 GO TO 202
12740 C FOR 'X' WITHOUT SPACES.
12800 752 IF(N.NE.ISEMI.AND.INP(ML).NE.1)GO TO 2799
12900 751 IF(ISKP.EQ.0)RETURN
13000 202 IF(IDECI.NE.-1)GO TO 302
13100 IDECI=0
13200 GO TO 402
13300 302 IDECI=M-IDECI
13400 402 KN=0
13500 IEXP=M-1
13600 IF(M.LT.1)M=1
13700 DO 171 K=1,M
13800 KV=10**IEXP
13900 IF(IEXP.EQ.0)KV=1
14000 KN=KN+IP(K)*KV
14100 171 IEXP=IEXP-1
14200 A=10**IDECI
14300 IF(IDECI.EQ.0)A=1.
14400 JJ=JJ+1
14500 VX(JJ)=KN/A*XMINUS
14600 IF(ISUB.EQ.1)RETURN
14700 IF(CODE.NE.-22.)XMINUS=1.
14800 C ONLY ONE - NEEDED FOR RHY.COMPOSITE
14900 1310 IF(INP(ML).NE.1)GO TO 310
15000 VX(JJ+1)=VX(JJ)*2.
15100 JJ=JJ+1
15200 ML=ML+1
15300 GO TO 1310
15400 206 ML=ML+2
15500 3310 VX(1)=-99.
15600 C******** MAY 19,71
15700 310 ISKP=0
15800 IF(N.NE.ISEMI)GO TO 999
15900
16000 RETURN
16100 73 JJ=JJ+1
16200 IF(INP(ML).EQ.IE)GO TO 206
16300 C NEXT IS FOR A REST ('R')
16400 VX(JJ)=85.
16500 GO TO 4410
16600 CC206 ML=ML+2
16700 CC VX(JJ)=-99.
16800 CC GO TO 310
16900 END
17000
17100 SUBROUTINE BGSORT(BW)
17200 C THIS SORTS BG TIMES SO NONE ARE DUPLICATED IN BNW ARRAY.
17300 C ALLOWS 100 BG TIMES.
17400 COMMON /Q/ BNW(100),NWZ
17500 DO 5308 K=1,NWZ
17600 X=BNW(K)-.0001
17700 Y=X+.0002
17800 C ROUND-OFF NONSENSE
17900 5308 IF(BW.GT.X.AND.BW.LT.Y)RETURN
18000 NWZ=NWZ+1
18100 BNW(NWZ)=BW
18200 RETURN
18300 END
18400
18500 SUBROUTINE FMT(JFM,INP,MLX)
18600 DIMENSION JFM(3),INP(1)
18700 DO 1 MLX=2,72
18800 J=INP(MLX)
18900 1 IF(J.EQ.' '.OR.J.EQ.','.OR.J.EQ.';')GO TO 2
19000 C SPACE=COMMA=SPACE, ALSO STOPS ON ";"
19100 2 MLX=MLX+1
19200 IF(MLX.GT.7)MLX=7
19300 JFM(2)='0'+(MLX-2)*536870912
19400 C FINDS NUMBER FOR 'A' FORMAT
19500 RETURN
19600 END
19700
19800 SUBROUTINE RANR(VX,K)
19900 C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
20000 DIMENSION VX(1)
20100 X=VX(K)
20200 Y=VX(K+1)
20300 IF(X.GT.Y)VX(K)=X+.999
20400 IF(Y.GE.X)VX(K+1)=Y+.999
20500 RETURN
20600 END